package org.colswe.testingProject.entity;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;

/**
 * Esta clase entidad es usada para almacenar la información correspondiente a
 * los roles de los usuarios en el sistema.
 *
 * @author Leonardo Bohórquez
 */
@Entity
public class SystemRoles implements Serializable {

    /**
     * Constante 41.
     */
    private static final int CUATRO1 = 41;
    /**
     * Constante false.
     */
    private static final boolean FALSE = false;
    /**
     * Constante true.
     */
    private static final boolean TRUE = true;
    /**
     * Id del rol.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    /**
     * Nombre del rol.
     */
    @Column(length = CUATRO1, nullable = FALSE, unique = TRUE)
    private String name;
    /**
     * Opciones del rol.
     */
    @OneToMany
    @JoinTable
    private Collection<SystemOptions> options;

    /**
     * Constructor por defecto de la clase SystemRoles.
     */
    public SystemRoles() {
    }

    /**
     * Constructor que recibe los parámetros necesarios para inicializar la
     * clase SystemRoles.
     *
     * @param name Nombre del rol
     */
    public SystemRoles(String name) {
        this.name = name;
    }

    /**
     * Función que permite obtener el Id del rol.
     *
     * @return Id del rol
     */
    public Long getId() {
        return id;
    }

    /**
     * Método que permite establecer el Id del rol.
     *
     * @param id id del rol
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * Función que permite obtener el nombre del rol.
     *
     * @return Nombre dle rol
     */
    public String getName() {
        return name;
    }

    /**
     * Método que permite establecer el nombre del rol.
     *
     * @param name Nombre del rol
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Función que permite obtener la colección de opciones que tiene el rol.
     *
     * @return Colección con las opciones del rol
     */
    public Collection<SystemOptions> getOptions() {
        return options;
    }

    /**
     * Método que permite establecer la colección de opciones que tiene el rol.
     *
     * @param options Colección de opciones del rol
     */
    public void setOptions(Collection<SystemOptions> options) {
        this.options = options;
    }

    /**
     * Función que permite agregar una opción a la colección de opciones del
     * rol.
     *
     * @param e Opción a agregar
     * @return Verdadero si se agregó correctamente, falso en caso contrario
     */
    public boolean add(SystemOptions e) {
        return options.add(e);
    }

    /**
     * Función que permite eliminar una opción de la colección de opciones del
     * rol.
     *
     * @param e Opción a eliminar
     * @return Verdadero si se eliminó correctamente, falso en caso contrario
     */
    public boolean remove(SystemOptions e) {
        return options.remove(e);
    }
}
